package main

import "fmt"

// 接口不能创建实例,一个自定义类型必须实现了某个接口的所有方法，才能叫实现该接口
// 自定义类型都可以实现接口
// 一个自定义类型可以实现多个接口
func main() {

	// 自定义类型都可以实现接口
	var stu Student = Student{}
	var a AInterface = stu
	a.FuncA()

	//自定义类型都可以实现接口
	var i integer = 10
	var b AInterface = i
	b.FuncA()

	// 一个自定义类型可以实现多个接口
	var m Monster = Monster{}
	var a2 AInterface = m
	a2.FuncA()

	var b2 BInterface = m
	b2.FuncB()

}

type AInterface interface {
	FuncA()
}
type BInterface interface {
	FuncB()
}

// Student
// @Description: 自定义类型
type Student struct {
	Name string
}

// FuncA
//
//	@Description: 结构体Student实现接口AInterface，实现了接口AInterface中的方法FuncA
//	@receiver stu
func (stu Student) FuncA() {
	fmt.Println("Student implements AInterface FuncA.....")
}

type integer int

// FuncA
//
//	@Description: 自定义类型integer实现接口AInterface，实现了接口AInterface中的方法FuncA
//	@receiver i
func (i integer) FuncA() {
	fmt.Println("integer implements AInterface FuncA.....")
}

type Monster struct {
}

// FuncA
//
//	@Description: 结构体Monster实现接口AInterface，实现了接口AInterface中的方法FuncA
//	@receiver m
func (m Monster) FuncA() {
	fmt.Println("Monster implements AInterface FuncA.....")
}

// FuncB
//
//	@Description: 结构体Monster实现接口AInterface，实现了接口BInterface中的方法FuncB
//	@receiver m
func (m Monster) FuncB() {
	fmt.Println("Monster implements BInterface FuncB.....")
}
